package com.dyp.listenerdemo.web.listener;

import org.springframework.stereotype.Component;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;


@WebListener
//@Component
public class MyRequestListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        String method = request.getMethod();
        String path = request.getRequestURI();
        // 格式化输出（包含时间、请求关键信息）
        System.out.printf("[%tF  %tT] MyRequestListener @WebListener 请求销毁 - 方法: %s, 路径: %s",
                new Date(), new Date(), method, path);
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {

        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        String method = request.getMethod();
        String path = request.getRequestURI();
        /**
         * setAttribute()用于在**请求作用域（Request Scope）**中存储临时数据，其特点包括：
         *
         * 生命周期：数据仅存在于当前请求周期内（从请求开始到响应结束）
         * 作用范围：同一请求的转发（RequestDispatcher.forward() ）或包含（include()）中可共享
         * 线程安全：每个请求独立存储，天然支持多线程
         */
        request.setAttribute("abcKey","abc");//后面流程是取不到的，无法在这个地方添加

        // 格式化输出（包含时间、请求关键信息）
        System.out.printf("[%tF  %tT] MyRequestListener @WebListener request 初始化 - 方法: %s, 路径: %s",
                new Date(), new Date(), method, path);
    }
}
